// File AbstractState.h
//
// Purpose: abstract base class to define an interface for a state
//
// Author : Bryson King (edited)
// Original Code Provided by: Mat Buckland 2002 (fup@ai-junkie.com)
// Date : 18 March 2013
// --------------------------------------------------------------
#ifndef ABSTRACTSTATE_H
#define ABSTRACTSTATE_H

#define DEBUG_SECTION

struct Telegram;

template <class entity_type>
class CState
{
public:
	CState() {}
	virtual ~CState() {}

	//this will execute when the state is entered
	virtual void Enter(entity_type*)=0;

	//this is the states normal update function
	virtual void Execute(entity_type*)=0;

	//this will execute when the state is exited. 
	virtual void Exit(entity_type*)=0;

	//this executes if the agent receives a message from the 
	//message dispatcher
	virtual bool OnMessage(entity_type*, const Telegram&)=0;

};

#endif